觀念
閉包(Closure)是 JavaScript 中的一個重要概念,當一個內部函數被其外部函數返回並在外部被引用時,它仍然能夠記住並訪問它被創建時的環境。這是因為 JavaScript 中的函數會保留它被創建時的變數環境,即使這個函數在其創建環境之外執行。
用法
閉包的主要用途包括:
資料封裝與私有化:可以用閉包創建私有變數和方法,模擬私有屬性和方法。
模組模式:可以用閉包創建模組,封裝一些邏輯並提供公開接口。
柯里化(Currying):通過閉包創建部分應用的函數,這在函數式編程中非常常見。
回調與非同步操作:閉包常用於處理回調和非同步操作,因為它們可以記住上下文。
以下是一個簡單的範例,展示閉包的使用:
function createCounter() {
let count = 0; // 私有變數
return function() {
count += 1;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
在這個範例中,createCounter 函數創建了一個 count
變數,並返回了一個匿名函數。這個匿名函數形成了一個閉包,它能夠記住並訪問 count 變數,即使 createCounte
r 函數已經執行完畢。每次調用 counter
函數時,它都會訪問和修改 count 變數,從而實現計數功能。